package com.atguigu.scw.manager.controller;

import com.atguigu.scw.manager.bean.TPermission;
import com.atguigu.scw.manager.constant.Constans;
import com.atguigu.scw.manager.service.PermissionService;
import com.atguigu.scw.manager.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * 页面调度中心
 */
@Controller
public class DispatcherController {
    Logger logger = LoggerFactory.getLogger(DispatcherController.class);

    @Autowired
    PermissionService permissionService;
    @Autowired
    UserService userService;

    @RequestMapping(value = "/main.html") // mai.html是伪静态化效果
    public String toMainPage(HttpSession httpSession) {
        // 校验
        // 由于用户可以直接访问这个请求，所以需要判断Session中是否有这个用户，如果没有去登录页面
        Object attribute = httpSession.getAttribute(Constans.LOGIN_USER);
        if (null == attribute) {
            // 用户没有登录
            return "redirect:/login.jsp";
        } else {
            logger.debug("跳转到后台系统main页面");
            // 用户登录才来到主页，session中没有菜单，或者被我们从session中清除了
            if (httpSession.getAttribute(Constans.MAIN_MENU) == null) {
                // 查出所有菜单，在页面上显示
                List<TPermission> allMenuList = permissionService.getAllMenus();
                // 将查到的菜单放到Session域中，当前用户的这次会话一直使用，只需要去数据库查询一次
                httpSession.setAttribute(Constans.MAIN_MENU, allMenuList);
            }
            // 用户登录来到主页
            return "manager/main";
        }
    }

    /**
     * 退出登录，返回主页面
     *
     * @param httpSession
     * @return
     */
    @RequestMapping(value = "/index.html")
    public String logoutToIndexPage(HttpSession httpSession) {
        logger.debug("注销系统");
        // session 默认30分钟失效，所以需要判空
        if (httpSession != null) {
            httpSession.removeAttribute(Constans.LOGIN_USER);
            httpSession.invalidate();
        }
        return "redirect:/index.jsp";
    }

    @RequestMapping("/manager/toAdd")
    public String toAdd() {
        return "manager/permission/add";
    }

    @RequestMapping("/sendEmail")
    public String forgetPassword(@RequestParam("email") String email, Model model) {
        logger.debug("email:{}", email);
        Boolean flag = userService.sendEmail(email);
        if (flag) {
            model.addAttribute("msg", "我们已经为你的邮箱成功发送了一封邮件！");
        } else {
            model.addAttribute("msg", "我们已经为你的邮箱发送了一封邮件！");
        }
        return "success";
    }
}
